package model.comunication;

import java.util.List;

import model.Usuario;
import model.dba.UsuarioDAO;

public class IUsuario {
	private UsuarioDAO usuarioDAO;
	private static IUsuario usuarioInterface;

	private IUsuario() {
		usuarioDAO = UsuarioDAO.getInstance();
	}

	public static IUsuario getInstance() {
		if (usuarioInterface == null) {
			usuarioInterface = new IUsuario();
		}
		return usuarioInterface;
	}

	/**
	 * Crea el objeto
	 * 
	 * @param id
	 * @param nombre
	 * @return
	 */
	public Usuario getUsuario(Integer id, String name, String password, String permisos) {
		return new Usuario(id, name, password, permisos);
	}

	/**
	 * Crea el objeto
	 * 
	 * @param nombre
	 * @return
	 */
	public Usuario getUsuario(String name, String password, String permisos) {
		return new Usuario(name, password, permisos);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param id
	 * @return
	 */
	public List<Usuario> getUsuario(String name) {
		return this.usuarioDAO.find(name);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param id
	 * @return
	 */
	public Usuario findUsuario(String name) {   //TODO estaba para que retorne arraylist
		return this.usuarioDAO.get(name);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param id
	 * @return
	 */
	public Usuario findUsuario(String name, String password) {
		return this.usuarioDAO.find(name, password);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param id
	 * @return
	 */
	public Usuario getUsuario(Integer id) {
		return this.usuarioDAO.get(id);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param id
	 * @return
	 * @return
	 */
	public List<Usuario> getAllUsuario() {
		return this.usuarioDAO.all();
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param usuario
	 * @return
	 */
	public Integer addUsuario(Usuario usuario) {
		return this.usuarioDAO.add(usuario);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param id
	 * @return
	 */
	public boolean deleteUsuario(Integer id) {
		return this.usuarioDAO.delete(id);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param usuario
	 * @return
	 */
	public boolean updateUsuario(Usuario usuario) {
		return this.usuarioDAO.update(usuario);
	}

}
